# 2020/09/20 面试总结
在公司呆久了,出去面试见识见识世面
一共面了两家公司,分别讲讲。
# 上午
# 斐波那契
# 方法一:普通递归
function fibonacci(n) {
if ([1, 2].includes(n)) return 1;
return fibonacci(n - 2) + fibonacci(n - 1);
}
f: 1901.197998046875 ms
缺点:存在重复计算,容易爆栈
# 方法二:改进递归,作为函数参数
function fibonacci(n) {
function fib(n, v1, v2) {
if (n === 1) {
return v1
} else if (n === 2) {
return v2
} else {
return fib(n - 1, v2, v1 + v2)
}
}
return fib(n, 1, 1)
}
f: 7.71484375 ms
# 方法三:改进递归,用数组记录
function fibonacci(n) {
let memo = [0, 1]
function fib(n) {
if (memo[n] === undefined) {
memo[n] = fib(n - 1) + fib(n - 2)
}
return memo[n]
}
return fib(n)
}
f: 14.156005859375 ms
# 方法四: for循环
function fibonacci(n) {
let n1 = 1, n2 = 1
for (let i = 2; i < n; i++) {
[n1, n2] = [n2, n1 + n2]
}
return n2
}
f: 5.817138671875 ms
# 运行耗时
let x = 1
console.time('f')
while (x < 10000) {
fibonacci(20)
x++
}
console.timeEnd('f')
普通递归>改进递归>for循环
# 左右布局
# float+margin
.left {
float: left;
width: 200px;
height: 100%;
background-color: red;
}
.right {
margin-left: 200px;
background-color: blue;
}
# float + overflow:hidden
利用overflow:hidden形成BFC,因为BFC不会与float box重叠。
.left {
float: left;
width: 200px;
height: 100%;
background-color: red;
}
.right {
overflow:hidden;
background-color: blue;
}
12345678910
# CSS3 float + calc
.left {
float: left;
width: 200px;
height: 100%;
background-color: red;
}
.right {
float: left;
width: calc(100% - 200px);
height: 100%;
background-color: blue;
}
123456789101112
# 弹性布局
.parent {
display: flex;
}
.left {
width: 200px;
height: 100%;
background-color: red;
}
.right {
display: flex;
flex: 1;
height: 100%;
background-color: blue;
}
# 定位
当然,使用absolute定位也是可以的,通过left调整位置就可以了。
# 表单设计
不知道怎么写,写了个vue的常规操作
# 从输入Url到显示
常规操作
http需详细了解
# 有效括号
leetcode常规操作
# 两个数组求是否是子集
# vue 父子组件的生命周期顺序
1. 加载渲染过程
同步引入时生命周期顺序为: 父组件的beforeCreate、created、beforeMount --> 所有子组件的beforeCreate、created、beforeMount --> 所有子组件的mounted --> 父组件的mounted 总结:父组件先创建,然后子组件创建;子组件先挂载,然后父组件挂载 若有孙组件呢? 父组件先beforeCreate => created => beforeMount , 然后子组件开始beforeCreate => created => beforeMount ,然后孙组件beforeCreate => created => beforeMount => mounted,孙组件挂载完成了,子组件mounted,父组件再mounted
异步引入时生命周期顺序为: 父组件的beforeCreate、created、beforeMount、mounted --> 子组件的beforeCreate、created、beforeMount、mounted
总结:父组件创建,父组件挂载;子组件创建,子组件挂载。
2. 子组件更新过程 父beforeUpdate->子beforeUpdate->子updated->父updated
3.父组件更新过程 父beforeUpdate->父updated
4.销毁过程 父beforeDestroy->子beforeDestroy->子destroyed->父destroyed
# 下午
问的很简单,没问什么技术问题,考了两道逻辑题,一道都没答出来。。。
- 5L水,3L水,求4L水
- 黑帽子白帽子,求黑帽子